Traditional operating system input/output schedulers are optimized for magnetic storage devices. Magnetic storage devices differ from solid state storage (e.g. flash memory) in three main properties. First, magnetic storage devices can physically service only a single I/O request at a time. Second, in magnetic storage devices, read and write latencies are approximately equal, and finally I/O latency is sensitive to I/O ordering. In contrast, solid state storage can service multiple I/O requests truly concurrently, read requests are substantially (e.g. 10×) faster than writes requests, and read latency is not sensitive to I/O ordering in the short term. Consequently, computers typically do not use a traditional I/O scheduler with solid state storage. Instead, the computers send the read and write requests directly to the solid state storage.
One drawback with this approach is that the I/O interface to the solid state storage can be limited. Only a small number of read and write request can be issued to the solid state storage at a time (typically 32), through the buffer of the solid state storage (e.g. Native Command Queueing (NCQ) mechanism). As long as there is a mix of reads and writes in the buffer of the solid state storage, the solid state storage can service read requests quickly. However, due to the higher latency (and much higher latency variance) of write requests, write requests can dominate the buffer of the solid state storage. This starves out read requests, and makes I/O latency of the solid state storage device appear to be much higher than it would be with fewer read requests.